package com.scheduling.material.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.scheduling.material.dto.MaterialDTO;
import com.scheduling.material.dto.MaterialQueryDTO;
import com.scheduling.material.entity.Material;

import java.util.List;

/**
 * 原料业务层接口
 *
 * @author 开发团队
 * @since 2025-05-29
 */
public interface MaterialService extends IService<Material> {

    /**
     * 分页查询原料列表
     *
     * @param queryDTO 查询条件
     * @return 原料分页列表
     */
    IPage<Material> getMaterialPage(MaterialQueryDTO queryDTO);

    /**
     * 根据ID获取原料详情
     *
     * @param materialId 原料ID
     * @return 原料详情
     */
    Material getMaterialById(String materialId);

    /**
     * 添加原料
     *
     * @param materialDTO 原料信息
     * @return 添加结果
     */
    boolean addMaterial(MaterialDTO materialDTO);

    /**
     * 更新原料
     *
     * @param materialDTO 原料信息
     * @return 更新结果
     */
    boolean updateMaterial(MaterialDTO materialDTO);

    /**
     * 删除原料
     *
     * @param materialId 原料ID
     * @return 删除结果
     */
    boolean deleteMaterial(String materialId);

    /**
     * 批量删除原料
     *
     * @param materialIds 原料ID列表
     * @return 删除结果
     */
    boolean deleteMaterials(List<String> materialIds);

    /**
     * 获取所有原料列表（用于下拉选择）
     *
     * @return 原料列表
     */
    List<Material> getAllMaterials();

    /**
     * 检查原料名称是否存在
     *
     * @param materialName 原料名称
     * @param excludeId    排除的ID（更新时使用）
     * @return 是否存在
     */
    boolean checkMaterialNameExists(String materialName, String excludeId);
} 